// 导入 http 模块
import http from 'wechat-http'
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = params => {
  // 获取全局token
  const { token } = getApp()

  // 维护请求头, 默认请求头没有东西, 但是如果token存在, 那么就加上去
  const defaultHeader = {}
  if (token) defaultHeader.Authorization = token
  // 如果有token就往原来的请求头基础上继续拼接
  // if (token) {
  params.header = {
    ...defaultHeader,
    ...params.header,
    // params.headers.Authorization = token
    // }
  }
  // params.header.Authorization = token
  // 拦截需要返回
  return params
}
// 响应拦截器
http.intercept.response = async (res) => {
  // 如果发现token出错(改token)，尝试更新,跟后端约好 401 状态码就是token失效
  if (res.statusCode === 401) {
    // 其实 401 的报错, 除了token失效,  refreshToken 也出问题的话, 还是 401,
    if (res.config.url.includes('/refreshToken')) {
      // console.log(123);
      // 获取当前页面历史栈
      const pageStack = getCurrentPages()
      // console.log('页面栈', pageStack);
      // 取出当前页面路径，登录成功跳转到该页面 
      const lastPage = pageStack[pageStack.length - 1]
      const redirectURL = lastPage.route
      // 没有token重定向到登录页，获取token
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,

      });
    }
    // 获取全局应该实例
    const app = getApp()
    // 如果没有refresh_token，就不需要使用refresh_token刷新token
    if (!app.refresh_token) return
    // 使用refresh更新token
    const resRefresh = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refresh_token
      },
    })
    // 更新token和refresh_token
    app.setToken(resRefresh.data.token, resRefresh.data.refreshToken)
    // 如果token更新成功, 那么就要再次调用原来的请求, 让用户体验没有断裂感数据获取
    return http({
      ...res.config,
      header: {
        Authorization: app.token
      }
    })

  }
  // 直接返回res.data在获取数据时可以直接拿到data，相当于解构了。
  return res.data
}

/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http